上一篇我們談到 Ingress 的優點與不足。Ingress 適合用來做簡單的外部入口管理,但當系統逐漸成長,需求從 「路由」 變成 「流量治理」 時,Ingress 就顯得力不從心。
這就是 Gateway API 誕生的背景。
Gateway API 不是全新的東西,而是 Ingress 的進化版,由 Kubernetes SIG-Network 社群設計,目標是:
Gateway API 定義了一組新的 CRD:
GatewayClass
Gateway
HTTPRoute / TCPRoute / GRPCRoute
ReferenceGrant
| 功能 | Ingress | Gateway API | 
|---|---|---|
| 規格範圍 | 只支援基本 Host/Path 規則 | 支援 Host、Path、Header、Method、權重分流 | 
| 標準化程度 | 高度依賴 Controller | API 規格統一 | 
| 角色分工 | 開發者跟基礎設施混在一起 | Gateway 由基礎設施團隊管理,Route 由應用團隊管理 | 
| 進階流量治理 | 幾乎不支援 | 支援流量分流、金絲雀發布、跨 namespace 管理 | 
| 多協議支援 | 只支援 HTTP/HTTPS | 支援 HTTP, TCP, gRPC, TLS | 
假設一個 Gateway API 的設定:
apiVersion: gateway.networking.k8s.io/v1beta1
kind: Gateway
metadata:
  name: my-gateway
spec:
  gatewayClassName: nginx
  listeners:
  - name: http
    protocol: HTTP
    port: 80
---
apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
metadata:
  name: my-route
spec:
  parentRefs:
  - name: my-gateway
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /api
    backendRefs:
    - name: api-svc
      port: 80
這樣就能做到類似 Ingress 的功能,但可擴展性更強。
統一規範
細粒度路由
角色分工
跨 namespace 支援
多協議支援
Gateway API 並不是要馬上取代 Ingress,而是逐步成為更通用、更標準化的選項。
如果你的團隊已經遇到 Ingress 規格不足的痛點,Gateway API 值得開始嘗試。